import { Request, Response } from 'express';
import * as xlsx from 'xlsx';
import fs from 'fs';
import path from 'path';
import { translateText } from '../services/translateService';
import { sleep } from '../utils/common';

// 模拟翻译函数
const mockTranslate = (text: string, sourceLang: string, targetLang: string): string => {
  // 简单的模拟翻译映射
  const mockTranslations: Record<string, Record<string, Record<string, string>>> = {
    'zh': {
      'en': {
        '欢迎使用多语言翻译助手': 'Welcome to the Multilingual Translation Assistant',
        '上传文件': 'Upload File',
        '开始翻译': 'Start Translation',
        '源语言': 'Source Language',
        '目标语言': 'Target Language',
        '下载JSON文件': 'Download JSON File',
        '复制JSON': 'Copy JSON',
        '翻译成功！': 'Translation Successful!',
        '翻译失败，请重试！': 'Translation Failed, Please Try Again!',
        '请上传包含key和源语言列的Excel或CSV文件': 'Please upload an Excel or CSV file containing key and source language columns'
      },
      'ja': {
        '欢迎使用多语言翻译助手': '多言語翻訳アシスタントへようこそ',
        '上传文件': 'ファイルをアップロード',
        '开始翻译': '翻訳を開始',
        '源语言': 'ソース言語',
        '目标语言': 'ターゲット言語',
        '下载JSON文件': 'JSONファイルをダウンロード',
        '复制JSON': 'JSONをコピー',
        '翻译成功！': '翻訳成功！',
        '翻译失败，请重试！': '翻訳に失敗しました。もう一度お試しください！',
        '请上传包含key和源语言列的Excel或CSV文件': 'キーとソース言語の列を含むExcelまたはCSVファイルをアップロードしてください'
      },
      'ru': {
        '欢迎使用多语言翻译助手': 'Добро пожаловать в многоязычный помощник перевода',
        '上传文件': 'Загрузить файл',
        '开始翻译': 'Начать перевод',
        '源语言': 'Исходный язык',
        '目标语言': 'Целевой язык',
        '下载JSON文件': 'Скачать JSON файл',
        '复制JSON': 'Копировать JSON',
        '翻译成功！': 'Перевод успешно выполнен!',
        '翻译失败，请重试！': 'Ошибка перевода, пожалуйста, попробуйте еще раз!',
        '请上传包含key和源语言列的Excel或CSV文件': 'Пожалуйста, загрузите файл Excel или CSV, содержащий столбцы с ключами и исходным языком'
      }
    },
    'en': {
      'zh': {
        'Welcome to the Multilingual Translation Assistant': '欢迎使用多语言翻译助手',
        'Upload File': '上传文件',
        'Start Translation': '开始翻译',
        'Source Language': '源语言',
        'Target Language': '目标语言',
        'Download JSON File': '下载JSON文件',
        'Copy JSON': '复制JSON',
        'Translation Successful!': '翻译成功！',
        'Translation Failed, Please Try Again!': '翻译失败，请重试！',
        'Please upload an Excel or CSV file containing key and source language columns': '请上传包含key和源语言列的Excel或CSV文件'
      }
    }
  };

  // 如果有预定义的翻译，则使用它
  if (mockTranslations[sourceLang]?.[targetLang]?.[text]) {
    return mockTranslations[sourceLang][targetLang][text];
  }

  // 否则生成一个模拟翻译
  const prefix = targetLang === 'en' ? '[EN] ' :
    targetLang === 'ja' ? '[JA] ' :
      targetLang === 'ru' ? '[RU] ' :
        targetLang === 'zh' ? '[ZH] ' :
          `[${targetLang}] `;

  return prefix + text;
};

export const translateFile = async (req: Request, res: Response) => {
  try {
    if (!req.file) {
      return res.status(400).json({ error: '没有上传文件' });
    }

    const { sourceLanguage, targetLanguages } = req.body;

    if (!sourceLanguage || !targetLanguages) {
      return res.status(400).json({ error: '缺少源语言或目标语言参数' });
    }

    const targetLanguageArray = Array.isArray(targetLanguages)
      ? targetLanguages
      : JSON.parse(targetLanguages);

    // 读取上传的文件
    const workbook = xlsx.readFile(req.file.path);
    const sheetName = workbook.SheetNames[0];
    const worksheet = workbook.Sheets[sheetName];
    const data = xlsx.utils.sheet_to_json(worksheet);

    // 翻译结果对象
    const translations: Record<string, Record<string, string>> = {};

    // 初始化每种目标语言的翻译结果对象
    targetLanguageArray.forEach((lang: string) => {
      translations[lang] = {};
    });

    // 处理每一行数据
    for (const row1 of data) {
      console.log('row:', row1);
      let row = row1 as Record<string, string>;
      const key = row['key'] || '';
      const text = row[sourceLanguage] || '';

      if (key && text) {
        // 对每种目标语言进行模拟翻译
        for (const targetLang of targetLanguageArray) {
          try {
            // 使用模拟翻译而不是真正的API
            const translatedText = mockTranslate(text, sourceLanguage, targetLang);
            // const translatedText = await translateText(text, sourceLanguage, targetLang);
            translations[targetLang][key] = translatedText;
          } catch (error) {
            console.error(`翻译错误 (${key}, ${targetLang}):`, error);
            translations[targetLang][key] = `[翻译错误] ${text}`;
          }
        }
      }
    }

    // 创建输出目录
    const outputDir = path.join(__dirname, '../../output');
    if (!fs.existsSync(outputDir)) {
      fs.mkdirSync(outputDir, { recursive: true });
    }

    // 为每种语言生成JSON文件
    const outputFiles: Record<string, string> = {};
    for (const lang of targetLanguageArray) {
      const outputPath = path.join(outputDir, `${lang}.json`);
      fs.writeFileSync(outputPath, JSON.stringify(translations[lang], null, 2));
      outputFiles[lang] = outputPath;
    }

    // 删除临时上传的文件
    fs.unlinkSync(req.file.path);

    // 模拟延迟，让用户感觉在进行翻译
    await sleep(2000);

    res.json({
      success: true,
      message: '翻译完成',
      translations,
      outputFiles
    });
  } catch (error) {
    console.error('翻译处理错误:', error);
    res.status(500).json({ error: '翻译处理过程中发生错误' });
  }
};